package com.example;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        String DOWNLOAD_DIR = "D:/downloads"; // 视频保存目录
        String jsonDir = "D:/json";
        String excelPath = "D:/output.xlsx";
        // 生成 [50, 1000] 的随机整数
        int min = 1000;
        int max = 6000;

        try {
            // 1. 生成基础 Excel（包含 D列 Page Link）
            List<Note> notes = JsonParser.parseJsonFiles(jsonDir);
            ExcelExporter.exportToExcel(notes, excelPath);
            System.out.println("基础 Excel 生成完成: " + excelPath);

            // 2. 读取 D列 链接
            List<String> pageLinks = ExcelReader.readPageLinks(excelPath);
            List<Map<MetadataType, String>> metadataList = new ArrayList<>();

            // 3. 遍历链接并抓取元数据
            for (String link : pageLinks) {
//                int randomNumber = (int) (Math.random() * (max - min + 1)) + min;
//                System.err.println("随机暂停"+randomNumber+"毫秒，防止爬虫封禁");
//                    Thread.sleep(randomNumber);
                // 抓取元数据
                Map<MetadataType, String> metadata = WebMetaScraper.scrapeMetadata(link);
                metadataList.add(metadata);

                // 打印控制台日志
                System.out.println("链接: " + link);
                System.out.println("og:video → " + metadata.get(MetadataType.OG_VIDEO));
                System.out.println("og:title → " + metadata.get(MetadataType.OG_TITLE));
                System.out.println("keywords → " + metadata.get(MetadataType.KEYWORDS));
                System.out.println("description → " + metadata.get(MetadataType.DESCRIPTION));
                System.out.println("-----------------------------");
            }
            // 4. 更新 Excel 写入元数据
            ExcelUpdater.updateExcelWithMetadata(excelPath, metadataList);
            System.out.println("元数据已写入 Excel");
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            // 1. 读取Excel中的视频元数据
            List<ExcelReader.VideoMetadata> metadataList = ExcelReader.readVideoMetadata(excelPath);
            System.out.println("发现可下载视频数量: " + metadataList.size());

            // 2. 遍历并下载
            for (ExcelReader.VideoMetadata metadata : metadataList) {
                String title =removeDashAndAfter(metadata.getTitle());
                String fileName = String.format("%d_%s", metadata.getIndex(), title);
                System.out.println(fileName);
                // 下载视频
                boolean success = VideoDownloader.downloadVideo(
                        metadata.getVideoUrl(),
                        DOWNLOAD_DIR,
                        fileName
                );

                // 打印结果
                if (success) {
                    System.out.printf("下载成功: %s → %s\n", metadata.getVideoUrl(), fileName);
                }
//                int randomNumber = (int) (Math.random() * (max - min + 1)) + min;
//                System.out.println("随机暂停"+randomNumber+"毫秒，防止爬虫封禁");
//                Thread.sleep(randomNumber);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static String removeDashAndAfter(String input) {
        if (input == null) {
            return null;
        }
        // 找到第一个 "-" 的位置
        int dashIndex = input.indexOf('-');
        if (dashIndex == -1) {
            // 没有横杠，直接去除前后空格
            return input.trim();
        } else {
            // 截取横杠前的部分并去除前后空格
            return input.substring(0, dashIndex).trim();
        }
    }
}


